// Package main 提供了一个使用 Gin 框架处理路由参数和中间件的 Web 服务器示例
// 演示了如何使用路由参数和中间件
package main

import (
	"fmt" // 导入 fmt 包，用于格式化输出

	"github.com/gin-gonic/gin" // 导入 Gin Web 框架
)

// RouteParamMiddleware 是一个中间件函数，在请求处理前和处理后执行
// 中间件函数接收一个 *gin.Context 参数
func RouteParamMiddleware(c *gin.Context) {
	// 在请求处理前打印信息
	fmt.Println("m1 ...in")

	// 在上下文中设置键值对，可以在后续处理函数中获取
	c.Set("name", "fengfeng")

	// 调用下一个处理函数
	c.Next()
}

// RunRouteParamServer 初始化 Gin 路由器，注册路由参数处理函数和中间件，启动 Web 服务器
func RunRouteParamServer() {
	// 创建默认的 Gin 路由器实例
	router := gin.Default()

	// 注册全局中间件 RouteParamMiddleware
	// 所有路由都会经过这个中间件处理
	router.Use(RouteParamMiddleware)

	// 注册路由：GET 请求 "/" 路径的处理函数
	router.GET("/", func(c *gin.Context) {
		// 在请求处理中打印信息
		fmt.Println("index ...in")

		// 从上下文中获取之前设置的值
		name, _ := c.Get("name")
		fmt.Println(name)

		// 返回 JSON 格式响应，状态码为 200
		// gin.H 是一个 map[string]interface{} 的简写
		c.JSON(200, gin.H{"msg": "index"})
	})

	// 启动 HTTP 服务器，监听 8080 端口
	// 如果启动失败，会返回一个 error 类型的错误信息
	if err := router.Run(":8080"); err != nil {
		// 使用 panic 输出启动失败的错误信息
		panic(err)
	}
}
